package com.yuw.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.yuw.bean.UserInfoBean;
import com.yuw.db.DBProvider;
import com.yuw.utils.EasyFactory;
import com.yuw.utils.MyUtils;

public class UserInfoModel {

	/**
	 * 登录信息查询
	 * 
	 * @param userInfoB 登录信息参数实体类
	 * @return 查询结果集
	 */
	public List<UserInfoBean> queryLoginInfo(UserInfoBean userInfoB) {
		// 拼写登录查询的sql语句
		String strSql = "select * from tuserinfo where user_name = ? and user_psw= ? ";
		// 执行查询，获取查询结果集（List+Bean）
		List<UserInfoBean> lst = EasyFactory.getNewInstance(DBProvider.class).query(strSql,
				new BeanListHandler<UserInfoBean>(UserInfoBean.class), userInfoB.getUser_Name(),
				userInfoB.getUser_Psw());
		// 返回查询结果集
		return lst;
	}

	/**
	 * 新增或修改用户信息
	 * 
	 * @param userInfoB 用户信息实体类
	 * @return 处理结果
	 */
	public int saveOrUpdateUserInfo(UserInfoBean userInfoB) {
		// 默认返回值
		int i = 0;
		// 拼写新增用户信息的sql
		String strSql = "insert into  tuserInfo(user_name,user_psw,user_createtime)  values(?, ?,to_date(?,'yyyy-mm-dd hh24:mi:ss') )";
		// 调用数据库驱动类，进行表数据新增操作
		i = EasyFactory.getNewInstance(DBProvider.class)
				.update(strSql,
						new Object[] { userInfoB.getUser_Name(), userInfoB.getUser_Psw(), MyUtils.convertDate2String(
								userInfoB.getUser_Createtime() == null ? new Date() : userInfoB.getUser_Createtime(),
								"yyyy-MM-dd HH:mm:ss") });
		return i;
	}

	/**
	 * 删除用户信息(物理删除)
	 * 
	 * @param userId 删除记录的主键值
	 * @return 删除结果
	 */
	public int deleteUserInfoById(Integer userId) {
		// 默认返回值
		int i = 0;
		// 拼写新增用户信息的sql
		// 使用delete的删除是物理删除
		String strSql = "delete from tuserinfo where user_id = ? ";
		// 调用数据库驱动类，进行表数据新增操作
		i = EasyFactory.getNewInstance(DBProvider.class).update(strSql, userId);
		// 返回结果
		return i;
	}

	/**
	 * 删除用户信息(逻辑删除)
	 * 
	 * @param userId 删除记录的主键值
	 * @return 删除结果
	 */
	public int DeleteUserInfoByIdLogic(Integer userId) {
		// 默认返回值
		int i = 0;
		// 拼写新增用户信息的sql
		// 使用delete的删除是物理删除
		String strSql = "update table tuserinfo set isdeleted = 1 where user_id = ? ";
		// 调用数据库驱动类，进行表数据新增操作
		i = EasyFactory.getNewInstance(DBProvider.class).update(strSql, userId);
		// 返回结果
		return i;
	}

	/**
	 * 查询所有的用户信息
	 * 
	 * @return 查询结果集
	 */
	public List<UserInfoBean> queryAllUserInfo() {
		// 拼写登录查询的sql语句
		String strSql = " select * from tuserinfo order by user_id desc ";
		// 执行查询，获取查询结果集（List+Bean）
		List<UserInfoBean> lst = EasyFactory.getNewInstance(DBProvider.class).query(strSql,
				new BeanListHandler<UserInfoBean>(UserInfoBean.class));
		// 返回查询结果集
		return lst;
	}

	/**
	 * 根据过滤条件查询用户信息
	 * 
	 * @return 查询结果集
	 */
	public List<UserInfoBean> queryUserInfoByParams(UserInfoBean userInfoB) {
		// 拼写登录查询的sql语句
		StringBuilder sbSql = new StringBuilder(" select * from tuserinfo where 1=1 ");
		// 使用list存储sql的？占位符的条件参数
		List<Object> lstParams = new ArrayList<>();

		if (userInfoB != null) {
			// 动态拼写Sql条件
			String strUserName = userInfoB.getUser_Name();
			if (strUserName != null && !strUserName.equals("")) {
				// 如果用户名不为空，则条件用户名查询过滤条件
				sbSql.append(" and user_name like ? ");
				// 同时对应添加查询条件集合
				lstParams.add("%" + strUserName + "%");
			}

			// 开始时间
			Date dateCreateTime = userInfoB.getUser_Createtime();
			if (dateCreateTime != null) {
				// 如果用户名不为空，则条件用户名查询过滤条件
				sbSql.append(" and user_createtime > to_date(?,'yyyy-mm-dd hh24:mi:ss') ");
				// 同时对应添加查询条件集合
				lstParams.add(MyUtils.convertDate2String(dateCreateTime, "yyyy-MM-dd HH:mm:ss"));
			}

			// 结束时间
			// 开始时间
			Date dateCreateTime2 = userInfoB.getUser_Createtime2();
			if (dateCreateTime != null) {
				// 如果用户名不为空，则条件用户名查询过滤条件
				sbSql.append(" and user_createtime < to_date(?,'yyyy-mm-dd hh24:mi:ss') ");
				// 同时对应添加查询条件集合
				lstParams.add(MyUtils.convertDate2String(dateCreateTime2, "yyyy-MM-dd HH:mm:ss"));
			}
		}

		// 拼接排序条件
		sbSql.append(" order by user_id desc ");

		// 执行查询，获取查询结果集（List+Bean）
		List<UserInfoBean> lst = EasyFactory.getNewInstance(DBProvider.class).query(sbSql.toString(),
				new BeanListHandler<UserInfoBean>(UserInfoBean.class), lstParams.toArray());

		// 返回查询结果集
		return lst;
	}
}
